/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package main.game;

import java.util.ArrayList;

/**
 *
 * @author vova
 */
public class GameEngine {

    public GameEngine() {
    }
    
    /**
    Начинает новую игру
    @param uids Список всех игроков, учавствующих в данной игре
    @param conventions Структура содержащая привила и договоренности для данной игры
     */
    public void StartGame(ArrayList<Integer> uids, GameConventions conventions) {
    }

    /**
    Завершение указанной игры (без уничтожения объекта игры)
     */
    public void FinishGame() {
    }

    /**
    Заказ контракта во время торговли
    @param uid Игрок - заказчик
    @param tradeRequest Строка заказа контракта
    @throws GameControllerException Не соответствие правилам игры
     */
    public void UserTrade(int uid, String tradeRequest) throws GameControllerException {
    }

    /**
    Заказ контракта во время торговли
    @param uid Игрок выполняющий ход
    @param moveRequest Строка описывающая ход
    @throws GameControllerException Не соответствие правилам игры
     */
    public void UserMove(int uid, String moveRequest) throws GameControllerException {
    }

    /**
    Игрок готов к следующей раздаче
    @param uid Идентификатор игрока
     */
    public void UserReady(int uid) {
    }

    /**
    Отмена готовности к следующей раздаче
    @param uid Идентификатор игрока
    @throws GameControllerException Не получилось отменить готовность
     */
    public void UserUnready(int uid) throws GameControllerException {
    }

    /**
    Пуля указанного игрока
    @param uid Идентификатор игрока
    @return Запись пули
    @throws GameControllerException Ошибка при получении данных
     */
    public ArrayList<Integer> getUserPool(int uid) throws GameControllerException {
        return null;
    }

    /**
    Гора указанного игрока
    @param uid Идентификатор игрока
    @return Запись горы
    @throws GameControllerException Ошибка при получении данных
     */
    public ArrayList<Integer> getUserGora(int uid) throws GameControllerException {
        return null;
    }

    /**
    Возвращает висты одного игрока на другого
    @param uid1 Владелец вистов
    @param uid2 На кого написаны висты
    @return Запись вистов
    @throws GameControllerException Ошибка при получении данных
     */
    public ArrayList<Integer> getUsersWhists(int uid1, int uid2) throws GameControllerException {
        return null;
    }
    
    /**
     * Получение конвенций игры
     * @return конвенции игры
     */
    public GameConventions getConventions() {
        return null;
    }
    
    /**
     * Расчет очков для указанного игрока
     * @param uid Идентификатор игрока
     * @return Расчет очков
     * @throws GameControllerException Ошибка при получении данных
     */
    public int getUserScore(int uid) throws GameControllerException {
        return 0;
    }
    
    /**
     * Состояние указанной игры
     * @return состояние игры
     * @throws GameControllerException Ошибка получения состояния игры
     */
    public PrefGameState getGameState() throws GameControllerException {
        return null;
    }
    
    /**
     * Список карт на руках у указанного игрока
     * @param uid Идентификатор игрока
     * @return список карт на руках у указанного игрока
     * @throws GameControllerException Ошибка получения списка карт
     */
    public ArrayList<GameCard> getUserCards(int uid) throws GameControllerException {
        return null;
    }
    
    /**
     * Список карт на столле
     * @return Список карт в массиве (положение на столе: 0-юг, 1-восток, 2-запад, 3-север)
     * @throws GameControllerException Ошибка получения списка карт
     */
    public GameCard[] getCardsOnDesk() throws GameControllerException {
        return null;
    }
}
